home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / smaltalk / manchest.lha / MANCHESTER / manchester / 2.3 / Actalk=2.3.st next >
Text File  |  1993-07-24  |  5KB  |  225 lines

  1. "    NAME        Actalk
  2.     AUTHOR        IWW@cs.man.ac.uk
  3.     FUNCTION quick hack to play with actor-like things - see Briot ECOOP89 
  4.     ST-VERSIONS    2.4
  5.     PREREQUISITES     
  6.     CONFLICTS    
  7.     DISTRIBUTION      world
  8.     VERSION        1.1
  9.     DATE    25 Jan 1989
  10.  
  11. SUMMARY    Actalk
  12.     A quick, simple hack for playing around with actor like
  13.     things in st80.  See ""Actalk: a Testbed for Classifying and
  14.     Designing Actor Languages in the Smalltalk-80 Environment"",
  15.     Jean-Pierre Briot, ECOOP 89. (2.3,2.4). IWW.
  16. "!
  17. Object subclass: #MinimalObject
  18.     instanceVariableNames: ''
  19.     classVariableNames: ''
  20.     poolDictionaries: ''
  21.     category: 'Actalk-Kernel'!
  22.  
  23. "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!
  24.  
  25. MinimalObject class
  26.     instanceVariableNames: ''!
  27.  
  28.  
  29. !MinimalObject class methodsFor: 'initialisation'!
  30.  
  31. initialise
  32.     superclass _ nil.
  33.     #(#doesNotUnderstand: #error: #~~ #isNil #= #== #printString #printOn: #class #inspect #basicInspect #basicAt: #basicSize #instVarAt:put: ) do: [:selector | self recompile: selector from: Object]! !
  34.  
  35. MinimalObject subclass: #Actor
  36.     instanceVariableNames: 'mailBox behaviour '
  37.     classVariableNames: ''
  38.     poolDictionaries: ''
  39.     category: 'Actalk-Kernel'!
  40.  
  41. MinimalObject initialise!
  42.  
  43. !Actor methodsFor: 'message passing'!
  44.  
  45. asynchronousSend: aMessage 
  46.     mailBox nextPut: aMessage!
  47.  
  48. doesNotUnderstand: aMessage 
  49.     self asynchronousSend: aMessage! !
  50.  
  51. !Actor methodsFor: 'access'!
  52.  
  53. mailBox
  54.     ^mailBox! !
  55.  
  56. !Actor methodsFor: 'initialisation'!
  57.  
  58. initialise
  59.     mailBox _ SharedQueue new!
  60.  
  61. initialiseBehaviour: aBehaviour
  62.     behaviour _ aBehaviour.
  63.     behaviour initialiseAself: self.! !
  64. "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!
  65.  
  66. Actor class
  67.     instanceVariableNames: ''!
  68.  
  69.  
  70. !Actor class methodsFor: 'initialisation'!
  71.  
  72. behaviour: aBehaviour 
  73.     ^self new initialiseBehaviour: aBehaviour! !
  74.  
  75. !Actor class methodsFor: 'instance creation'!
  76.  
  77. new
  78.     ^super new initialise! !
  79.  
  80. Object subclass: #ActorBehaviour
  81.     instanceVariableNames: 'aself '
  82.     classVariableNames: ''
  83.     poolDictionaries: ''
  84.     category: 'Actalk-Kernel'!
  85.  
  86.  
  87. !ActorBehaviour methodsFor: 'actor creation'!
  88.  
  89. actor
  90.     ^Actor behaviour: self! !
  91.  
  92. !ActorBehaviour methodsFor: 'message acceptance'!
  93.  
  94. acceptMessage: aMessage
  95.     self performMessage: aMessage.!
  96.  
  97. acceptNextMessage
  98.     self acceptMessage: aself mailBox next! !
  99.  
  100. !ActorBehaviour methodsFor: 'initialisation'!
  101.  
  102. initialiseAself: anActor 
  103.     aself _ anActor.
  104.     self setProcess!
  105.  
  106. setProcess
  107.     [[true]
  108.         whileTrue: [self acceptNextMessage]] fork! !'From Smalltalk-80, Version 2.4 of 28 January 1989 on 17 July 1989 at 4:27:09 pm'!
  109.  
  110.  
  111.  
  112. !Object methodsFor: 'message handling'!
  113.  
  114. performMessage: aMessage 
  115.     ^self perform: aMessage selector withArguments: aMessage arguments! !ActorBehaviour subclass: #AghaActorBehaviour
  116.     instanceVariableNames: ''
  117.     classVariableNames: ''
  118.     poolDictionaries: ''
  119.     category: 'Actalk-Extensions-Agha'!
  120.  
  121.  
  122. !AghaActorBehaviour methodsFor: 'behaviour replacement'!
  123.  
  124. replace: replacementBehaviour 
  125.     aself initialiseBehaviour: replacementBehaviour! !
  126.  
  127. !AghaActorBehaviour methodsFor: 'initialisation'!
  128.  
  129. setProcess
  130.     [self acceptNextMessage] fork! !AghaActorBehaviour subclass: #AghaCounter
  131.     instanceVariableNames: 'contents '
  132.     classVariableNames: ''
  133.     poolDictionaries: ''
  134.     category: 'Actalk-Examples'!
  135.  
  136.  
  137. !AghaCounter methodsFor: 'script'!
  138.  
  139. consultAndReplyTo: replyDestination 
  140.     self replace: self.
  141.     replyDestination reply: contents!
  142.  
  143. incr
  144.     self replace: (AghaCounter contents: contents + 1)!
  145.  
  146. reset
  147.     self replace: (AghaCounter contents: 0)! !
  148.  
  149. !AghaCounter methodsFor: 'initialisation'!
  150.  
  151. initialiseWithContents: aValue 
  152.     contents _ aValue! !
  153. "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!
  154.  
  155. AghaCounter class
  156.     instanceVariableNames: ''!
  157.  
  158.  
  159. !AghaCounter class methodsFor: 'examples'!
  160.  
  161. example1
  162.     "Make print a global print actor that will print the result"
  163.  
  164.     "Print _ Printer new actor. 
  165.     AghaCounter example1"
  166.  
  167.     | aCounter |
  168.     aCounter _ AghaCounter new actor.
  169.     aCounter reset; incr; incr; consultAndReplyTo: Print! !
  170.  
  171. !AghaCounter class methodsFor: 'instance creation'!
  172.  
  173. contents: aValue 
  174.     ^super new initialiseWithContents: aValue! !
  175.  
  176. ActorBehaviour subclass: #Counter
  177.     instanceVariableNames: 'contents '
  178.     classVariableNames: ''
  179.     poolDictionaries: ''
  180.     category: 'Actalk-Examples'!
  181.  
  182.  
  183. !Counter methodsFor: 'script'!
  184.  
  185. consultAndReplyTo: replyDestination 
  186.     replyDestination reply: contents!
  187.  
  188. consultAnReplyTo: replyDestination 
  189.     replyDestination reply: contents!
  190.  
  191. incr
  192.     contents _ contents + 1!
  193.  
  194. reset
  195.     contents _ 0! !
  196. "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!
  197.  
  198. Counter class
  199.     instanceVariableNames: ''!
  200.  
  201.  
  202. !Counter class methodsFor: 'examples'!
  203.  
  204. example1
  205.     "Make print a global print actor that will print the result"
  206.  
  207.     "Print _ Printer new actor. 
  208.     Counter example1"
  209.  
  210.     | aCounter |
  211.     aCounter _ Counter new actor.
  212.     aCounter reset; incr; incr; consultAndReplyTo: Print! !
  213.  
  214. ActorBehaviour subclass: #Printer
  215.     instanceVariableNames: ''
  216.     classVariableNames: ''
  217.     poolDictionaries: ''
  218.     category: 'Actalk-Examples'!
  219.  
  220.  
  221. !Printer methodsFor: 'script'!
  222.  
  223. reply: value 
  224.      Transcript show: '>' , value printString; cr! !
  225.